package thread;

import com.sun.org.apache.xpath.internal.objects.XObject;

public class ThreadDemo19 {
    private static int count = 0;
    public static void main(String[] args) throws InterruptedException {
        //随便创建个对象都可以
        Object locker = new Object();
        Object locker2 = new Object();
        //创建俩个线程,每个线程都针对上述变量自增5w次
        Thread t1 = new Thread(() ->{
            for (int i = 0; i < 50_000; i++) {
//                synchronized (locker) {
                    //进入{}就会加锁,出去就是解锁
                    count++;
//                }
            }
        });

        Thread t2 = new Thread(() ->{
//            try {
//                t1.join();//等待t1执行完之后再执行t2
//            } catch (InterruptedException e) {
//                throw new RuntimeException(e);
//            }
            for (int i = 0; i < 50_000; i++) {
//                synchronized (locker) {//这里改成locker2就还是会有线程安全
                    count++;//count++部分是串行执行的,但是for循环部分,是可以并发执行的
//                }
//                count++;
            }
        });
        t1.start();
        t2.start();
        
        t1.join();
        t2.join();
        //打印count结果
        System.out.println("count:" + count);
        //次数不是10w且每次运行结果不同,则就是线程不安全
        //load add save三个玩意
        //要保证第一个线程save之后第二个线程再load
    }
}
